
package cn.ydw.www.plugin.utils;

/*
 *
 * *****************************************************************************
 * @author 杨德望
 * @file_name ${file_name}
 * @package_name：${package_name}
 * @project_name：${project_name}
 * @department：IT部
 * @date: ${date} ${time}
 * @version
 * Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
 * ****************************************************************************
 * ${tags}
 *
 */
public class Logger {

    private static boolean gIsLog = true;
    private static boolean subLog = false;
    private static final String TAG = "打印";
    private static int strMaxNum = 500;

    public static void setLog(boolean isLog) {
        Logger.gIsLog = isLog;
    }

    /**
     * 是否截断打印日志
     *
     * @param subLog 是否截断,默认不截断
     */
    public static void seSubLog(boolean subLog) {
        Logger.subLog = subLog;
    }

    public static void setSubNum(int strMaxNum) {
        Logger.strMaxNum = strMaxNum;
    }


    public static void v(String msg) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.v(TAG, s);
                        } else {
                            android.util.Log.v(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.v(TAG, msg);
                }
            } else {
                android.util.Log.v(TAG, msg);
            }
        }
    }

    public static void v(String msg, Throwable tr) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.v(TAG, s);
                        } else if (index == subMsg.length - 1) {
                            android.util.Log.v(TAG, "---->日志过长，已自动截断<----\n " + s, tr);
                        } else {
                            android.util.Log.v(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.v(TAG, msg, tr);
                }
                ;
            } else {
                android.util.Log.v(TAG, msg, tr);
            }
        }
    }

    public static void v(String tag, String msg) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.v(tag, s);
                        } else {
                            android.util.Log.v(tag, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.v(tag, msg);
                }
                ;
            } else {
                android.util.Log.v(tag, msg);
            }
        }
    }

    /**
     * Send a {@link android.util.Log#VERBOSE} log message and log the exception.
     *
     * @param tag Used to identify the source of a log message. It usually
     *            identifies the class or activity where the log call occurs.
     * @param msg The message you would like logged.
     * @param tr  An exception to log
     */
    public static void v(String tag, String msg, Throwable tr) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.v(tag, s);
                        } else if (index == subMsg.length - 1) {
                            android.util.Log.v(tag, "---->日志过长，已自动截断<----\n " + s, tr);
                        } else {
                            android.util.Log.v(tag, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.v(tag, msg, tr);
                }
                ;
            } else {
                android.util.Log.v(tag, msg, tr);
            }
        }
    }

    public static void d(String msg) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.d(TAG, s);
                        } else {
                            android.util.Log.d(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.d(TAG, msg);
                }
                ;
            } else {
                android.util.Log.d(TAG, msg);
            }
        }
    }

    public static void d(String msg, Throwable tr) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.d(TAG, s);
                        } else if (index == subMsg.length - 1) {
                            android.util.Log.d(TAG, "---->日志过长，已自动截断<----\n " + s, tr);
                        } else {
                            android.util.Log.d(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.d(TAG, msg, tr);
                }
                ;
            } else {
                android.util.Log.d(TAG, msg, tr);
            }
        }
    }

    public static void d(String tag, String msg) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.d(tag, s);
                        } else {
                            android.util.Log.d(tag, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.d(tag, msg);
                }
                ;
            } else {
                android.util.Log.d(tag, msg);
            }
        }
    }

    /**
     * Send a {@link android.util.Log#DEBUG} log message and log the exception.
     *
     * @param tag Used to identify the source of a log message. It usually
     *            identifies the class or activity where the log call occurs.
     * @param msg The message you would like logged.
     * @param tr  An exception to log
     */
    public static void d(String tag, String msg, Throwable tr) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.d(tag, s);
                        } else if (index == subMsg.length - 1) {
                            android.util.Log.d(tag, "---->日志过长，已自动截断<----\n " + s, tr);
                        } else {
                            android.util.Log.d(tag, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.d(tag, msg, tr);
                }
                ;
            } else {
                android.util.Log.d(tag, msg, tr);
            }
        }
    }

    public static void i(String msg) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.i(TAG, s);
                        } else {
                            android.util.Log.i(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.i(TAG, msg);
                }
                ;
            } else {
                android.util.Log.i(TAG, msg);
            }
        }
    }

    public static void i(String msg, Throwable tr) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.i(TAG, s);
                        } else if (index == subMsg.length - 1) {
                            android.util.Log.i(TAG, "---->日志过长，已自动截断<----\n " + s, tr);
                        } else {
                            android.util.Log.i(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.i(TAG, msg, tr);
                }
                ;
            } else {
                android.util.Log.i(TAG, msg, tr);
            }
        }
    }

    public static void i(String tag, String msg) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.i(tag, s);
                        } else {
                            android.util.Log.i(tag, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.i(tag, msg);
                }
                ;
            } else {
                android.util.Log.i(tag, msg);
            }
        }
    }

    /**
     * Send a {@link android.util.Log#INFO} log message and log the exception.
     *
     * @param tag Used to identify the source of a log message. It usually
     *            identifies the class or activity where the log call occurs.
     * @param msg The message you would like logged.
     * @param tr  An exception to log
     */
    public static void i(String tag, String msg, Throwable tr) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.i(tag, s);
                        } else if (index == subMsg.length - 1) {
                            android.util.Log.i(tag, "---->日志过长，已自动截断<----\n " + s, tr);
                        } else {
                            android.util.Log.i(tag, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.i(tag, msg, tr);
                }
                ;
            } else {
                android.util.Log.i(tag, msg, tr);
            }
        }

    }

    public static void w(String msg) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.w(TAG, s);
                        } else {
                            android.util.Log.w(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.w(TAG, msg);
                }
                ;
            } else {
                android.util.Log.w(TAG, msg);
            }
        }
    }

    public static void w(String msg, Throwable tr) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.w(TAG, s);
                        } else if (index == subMsg.length - 1) {
                            android.util.Log.w(TAG, "---->日志过长，已自动截断<----\n " + s, tr);
                        } else {
                            android.util.Log.w(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.w(TAG, msg, tr);
                }
                ;
            } else {
                android.util.Log.w(TAG, msg, tr);
            }
        }
    }

    public static void w(String tag, String msg) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.w(tag, s);
                        } else {
                            android.util.Log.w(tag, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.w(tag, msg);
                }
                ;
            } else {
                android.util.Log.w(tag, msg);
            }
        }
    }

    /**
     * Send a {@link android.util.Log#WARN} log message and log the exception.
     *
     * @param tag Used to identify the source of a log message. It usually
     *            identifies the class or activity where the log call occurs.
     * @param msg The message you would like logged.
     * @param tr  An exception to log
     */
    public static void w(String tag, String msg, Throwable tr) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.w(tag, s);
                        } else if (index == subMsg.length - 1) {
                            android.util.Log.w(tag, "---->日志过长，已自动截断<----\n " + s, tr);
                        } else {
                            android.util.Log.w(tag, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.w(tag, msg, tr);
                }
                ;
            } else {
                android.util.Log.w(tag, msg, tr);
            }
        }
    }

    public static void e(String msg) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.e(TAG, s);
                        } else {
                            android.util.Log.e(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.e(TAG, msg);
                }
                ;
            } else {
                android.util.Log.e(TAG, msg);
            }
        }
    }

    public static void e(String msg, Throwable tr) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.e(TAG, s);
                        } else if (index == subMsg.length - 1) {
                            android.util.Log.e(TAG, "---->日志过长，已自动截断<----\n " + s, tr);
                        } else {
                            android.util.Log.e(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.e(TAG, msg, tr);
                }
                ;
            } else {
                android.util.Log.e(TAG, msg, tr);
            }
        }
    }

    public static void e(String tag, String msg) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.e(TAG, s);
                        } else {
                            android.util.Log.e(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.e(tag, msg);
                }
                ;
            } else {
                android.util.Log.e(tag, msg);
            }
        }
    }

    /**
     * Send a {@link android.util.Log#ERROR} log message and log the exception.
     *
     * @param tag Used to identify the source of a log message. It usually
     *            identifies the class or activity where the log call occurs.
     * @param msg The message you would like logged.
     * @param tr  An exception to log
     */
    public static void e(String tag, String msg, Throwable tr) {
        if (gIsLog) {
            if (subLog) {
                String[] subMsg = subMsg(msg);
                if (subMsg != null) {
                    for (int index = 0; index < subMsg.length; index++) {
                        String s = subMsg[index];
                        if (index == 0) {
                            android.util.Log.e(TAG, s);
                        } else if (index == subMsg.length - 1) {
                            android.util.Log.e(tag, "---->日志过长，已自动截断<----\n " + s, tr);
                        } else {
                            android.util.Log.e(TAG, "---->日志过长，已自动截断<----\n " + s);
                        }
                    }
                } else {
                    android.util.Log.e(tag, msg, tr);
                }
                ;
            } else {
                android.util.Log.e(tag, msg, tr);
            }
        }
    }


    private static String[] subMsg(String msg) {
        if (msg != null && msg.length() > strMaxNum) {
            // 需要切成几份
            int count = (msg.length() / strMaxNum) + 1;
            String[] subStr = new String[count];
            for (int index = 0; index < count; index++) {
                // 起点
                int beginIndex = index * strMaxNum;
                if (index == count - 1) {
                    subStr[index] = msg.substring(beginIndex);
                } else {
                    // 普通终点
                    int endIndex = beginIndex + strMaxNum;
                    subStr[index] = msg.substring(beginIndex, endIndex);
                }
            }
            return subStr;
        } else {
            return null;
        }
    }

}
